package lambda;

import java.io.File;
import java.io.FileFilter;

/**
 * JDK8之后推出了一个新特性：lambda表达式
 * lambda可以更精简的语法创建匿名内部类，
 * 语法：
 * (参数列表)->{
 *     方法体
 * }
 * 注：使用lambda创建匿名内部类时所实现的接口只能有一个抽象方法
 */
public class LambdaDemo {
    public static void main(String[] args) {
        //匿名内部类写法
        FileFilter filter0 = new FileFilter() {
            public boolean accept(File file) {  //accept:接受
                return file.getName().endsWith(".txt");
            }
        };
        //lambda表达式
        FileFilter filter = (File file)->{
            return file.getName().endsWith(".txt");
        };
        //方法参数的类型可以忽略不写
        FileFilter filter1 = (file)->{
            return file.getName().endsWith(".txt");
        };
        //如果方法中只有一句代码，则方法{}可以忽略不写，
        //如果这句话有return，则return也必须忽略
        FileFilter filter2 =
                (file)->file.getName().endsWith(".txt");
        //如果只有一个参数，那么参数的()可以忽略不写
        FileFilter filter3 =
                file->file.getName().endsWith(".txt");

        File dir = new File(".");
        File[] subs = dir.listFiles(
          f->f.getName().endsWith(".txt")
        );
        for (int i=0;i<subs.length;i++){
            System.out.println(subs[i].getName());
        }
    }
}
